package cc.eddic.pratice.programmingparadigms.nginxlog;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 * 日志报告
 */
public interface LogReport {
    /**
     * 统计 PV 和 UV
     *
     * @param items NginxLogItem 列表
     * @return PageViewsAndUniqueVisitors 对象
     */
    PageViewsAndUniqueVisitors pageViewsAndUniqueVisitors(List<NginxLogItem> items);

    /**
     * 按小时统计 PV 和 UV
     *
     * @param items NginxLogItem 列表
     * @return Map，key 为小时，value 为 PageViewsAndUniqueVisitors 对象
     */
    Map<Integer, PageViewsAndUniqueVisitors> pageViewsAndUniqueVisitorsByHour(List<NginxLogItem> items) throws ParseException;

    /**
     * 按 path 统计 PV 和 UV （统计结果按照 PV 降序排列）
     *
     * @param items LogItem 列表
     * @return PathModel 列表
     */
    List<PathModel> pageViewsAndUniqueVisitorsByPath(List<LogItem> items);

    /**
     * Path 统计对象
     */
    @Getter
    @Setter
    @AllArgsConstructor
    class PathModel {
        /**
         * URL 的 path
         */
        private String path;
        /**
         * PV
         */
        private long pv;
        /**
         * UV
         */
        private long uv;
    }
}
